package com.yqs.entity;

import com.yqs.dao.Display;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

/**
 * @author Ye QS
 * @version 0.1
 * @className Computer
 * @description
 * @date 2024/8/5 11:40
 * @since jdk11
 */

/**
 * 电脑类，用于表示一台电脑的配置信息。
 * 使用@Data注解自动为类生成标准的getters, setters, toString, hashCode和equals方法。
 * 使用@NoArgsConstructor注解自动为类提供一个无参构造函数。
 * 使用@Component注解声明这个类为Spring的一个组件，允许Spring容器管理其生命周期。
 * 该类包含显示器和主机框架的属性，分别使用@Autowired和@Qualifier注解进行自动装配。
 */
@Component
@Data
@NoArgsConstructor
public class Computer {
    /**
     * 显示器属性，使用@Autowired注解自动装配。
     * 使用@Qualifier("lg")注解指定具体要装配的显示器Bean的名称，确保即使有多个Display类型的Bean也能正确注入。
     */
    @Autowired
    @Qualifier(value = "lg")
    private Display display;

    /**
     * 主机框架属性，使用@Autowired注解自动装配。
     * 由于MainFrame类是唯一的，这里不需要使用@Qualifier注解。
     */
    @Autowired
    private MainFrame mainFrame;

    /**
     * 打印电脑信息的方法。
     * 该方法首先打印电脑信息的标题，然后依次调用display和mainFrame对象的打印信息方法，
     * 以展示电脑的显示器和主机框架的详细信息。
     */
    public void printComputerInfo() {
        System.out.println("电脑信息配置如下：");
        // 调用显示器的打印信息方法
        display.printDisplayInfo();
        // 调用主机框架的打印信息方法
        mainFrame.printMainFrameInfo();
    }
}